"""
代理服务器
"""
"""
代理的常用功能

    1 突破自身IP访问限制，访问国外网站。

    2 访问一些单位或者团体的内部资源

    3 提高访问速度
        通常代理服务器都设置了一个较大的缓冲区，当有外界的信息通过时，同时也将其保存在缓冲区中，
        当其它用户访问相同的信息时，就可以直接从缓冲区中取出信息，提高速度。

    4 隐藏真实IP


代码配置代理
    1 创建Request对象
    2 创建ProxyHandler对象
    3 用handler对象创建opener对象
    4 使用opener.open函数发送请求
"""

import urllib.request
import random

url = "https://www.baidu.com/s?wd=ip"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50"
}

request = urllib.request.Request(url=url, headers=headers)

# handler   build_opener   open

# 代理池，里面存放多个ip地址，供使用
proxies_pool = [{"http": "27.154.6.73:17249"}, {"http": "27.154.6.73:17249"}]

# 代理地址
proxies = random.choice(proxies_pool)

# 1 获取handler对象
handler = urllib.request.ProxyHandler(proxies=proxies)
# 2 获取opener对象
opener = urllib.request.build_opener(handler)
# 3 调用open方法
response = opener.open(request)

content = response.read().decode("utf-8")

with open("ip.html", "w", encoding="utf-8") as fp:
    fp.write(content)
